package cn.jsj.onclock.dao;

import cn.jsj.onclock.pojo.TaskEnt;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * @author 卢斌
 */
@Mapper
public interface TaskDao {

    /**
     * Id对应的签到任务（简略）
     *
     * @param id    签到任务Id
     * @return  签到任务
     */
    TaskEnt getBriefTaskEntById(@Param("id") Long id);


    /**
     * 查询用户相关的签到任务（详细）
     *
     * @param userId    用户Id
     * @return  用户相关的签到任务
     */
    List<TaskEnt> listTaskEntAboutUser(@Param("userId") Long userId);


    /**
     * 查询用户需要完成的签到任务
     *
     * @param userId    用户Id
     * @return  需要用户签到的任务
     */
    List<TaskEnt> listNeedFinishTask(@Param("userId") Long userId);


    /**
     * 批量新增签到任务
     *
     * @param signId            签到信息Id
     * @param executorIdList    签到用户Id列表
     */
    void insertTask(@Param("signId") Long signId, @Param("idList") List<Long> executorIdList);


    /**
     * 查询某一次签到的完成情况（携带签到者姓名）
     *
     * @param signId    签到Id
     * @return  本次签到的完成情况
     */
    List<TaskEnt> listSignFinishStatus(@Param("signId") Long signId);


    /**
     * 完成用户的部分任务
     *
     * @param userId        用户Id
     * @param taskIdList    用户需要完成的任务列表
     * @return 数据库影响条数
     */
    Integer updateTaskFinish(@Param("userId") Long userId, @Param("idList") List<Long> taskIdList);


    /**
     * 查询某用户在指定的几个签到中的完成情况
     *
     * @param executorId    签到者Id
     * @param signIdList    签到Id列表
     * @return  某一用户的签到完成情况
     */
    List<TaskEnt> listSpecialTaskOfExecutor(@Param("executorId") Long executorId, @Param("idList") List<Long> signIdList);

}
